package com.smartfast4j.manager.modules.sys.service;


import com.smartfast4j.manager.common.bean.SysResourceVo;
import com.smartfast4j.manager.common.bean.ZtreeMenuVo;
import com.smartfast4j.manager.modules.sys.bean.SysMenu;
import com.smartfast4j.pojo.sys.SysResource;
import com.smartfast4j.pojo.sys.SysResourceExample;

import java.util.List;
import java.util.Set;

public interface SysResourceService {
    int countByExample(SysResourceExample example);

    SysResource selectByPrimaryKey(Long id);

    List<SysResource> selectByExample(SysResourceExample example);

    int deleteByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(SysResource record);

    int updateByPrimaryKey(SysResource record);

    int deleteByExample(SysResourceExample example);

    int updateByExampleSelective(SysResource record, SysResourceExample example);

    int updateByExample(SysResource record, SysResourceExample example);

    int insert(SysResource record);

    int insertSelective(SysResource record);

    int insertBatchSelective(List<SysResource> records);

    int updateBatchByPrimaryKeySelective(List<SysResource> records);

    /**
     * 通过用户ID查找用户能够使用的资源
     * @param userId 用户ID
     * @param type 类型（1：菜单   2：按钮）
     * @return List<SysResource>
     */
    List<SysResource> getSysResourceByUserId(Long userId, Integer type);

    /**
     * 获取用户权限
     * @return
     */
    Set<String> getUserPerms(Long userId);

    /**
     * 通过Id获取资源树
     * @param id 资源id
     * @return SysResourceVo
     */
    SysResourceVo getResourceTreeById(Long id);

    /**
     * 通过Id获取资源树(采用递归查询方式)
     * @param id 资源id
     * @return SysResourceVo
     */
    SysResourceVo getResourceTreeById2(Long id);

    /**
     * 获取资源树集合
     * @return List<SysResourceVo>
     */
    List<SysResourceVo> getResourceTreeList();

    /**
     * 获取系统导航菜单
     * @param userId
     * @return
     */
    List<SysMenu> getNavMenu(Long userId);

    /**
     * 获取针对Ztree控件使用的树形结构菜单
     * @param menuType 菜单类型（1：菜单   2：按钮）
     * @return
     */
    List<ZtreeMenuVo> getZtreeMenu(Long userId, Integer menuType);

    /**
     * 根据角色ID获取菜单树形列表
     * @return
     */
    List<ZtreeMenuVo> getCheckTreeList(Long userId, Long roleId);

    /**
     * 新增
     * @param sysResource
     */
    void add(SysResource sysResource);

    /**
     * 清除权限
     * @param loginUserId
     * @param idList
     */
    void clearPerm(Long loginUserId, List<Long> idList);

    /**
     * 设置系统资源访问权限
     * @param sysResource
     */
    void setPerm(SysResource sysResource);

    /**
     * 删除资源
     * @param loginUserId
     * @param idList
     */
    void delete(Long loginUserId, List<Long> idList);
}